온라인 교육

소프트웨어 공학 개론

 

9주차 UI, DB 설계

 

 

사용자 인터페이스는 시스템의 구성요소 중 하나로 사용자에게 보이는 부분이다. DB는 사용자에게 보이지 않는 맨 끝에 존재하지만 시스템의 뿌리가 되는 중요한 부분이다. 두 가지 요소는 S/W 아키텍처에 포함되어 있지만 별도의 관점으로 자세한 설계가 필요하다.

사용자 인터페이스 설계는 사용자와의 다이얼로그가 어떤 식으로 진행되는지 자세한 시나리오를 작성하는 것이다. 그 과정에 메뉴의 구성, 화면 설계, 입력창, 정보 전달을 위한 팝업창 등을 자세히 설계한다. GUI 형태가 아닌 경우 명령어를 정할 수도 있다. 대부분의 UI 설계를 위한 정보는 사용사례를 구체적으로 작성하면서 또한 정적, 동적 모델을 구축하면서 파악되었다. 따라서 이 단계에서는 화면으로 어떻게 보이도록 구성할 것인지 결정한다.

DB 설계는 클래스 다이어그램에 표시된 엔티티 클래스들을 DB 테이블로 구성하는 작업이다. 정적 모델링에서 이미 데이터를 영구 보관하여야 할 클래스(엔티티 클래스)들이 구별되어 있기 때문에 DB 설계는 쉬워진다.

 

UI 설계 원리

 

좋은 UI를 설계하려면 다음과 같은 여덟 가지 기본 원리에 대한 이해가 필요하다.

 

Ÿ   배경 지식의 이해 - 인터페이스 설계는 기능 밑바탕에 깔린 배경을 이해하여야 한다. 시스템은 사용자의 작업에 도움을 주는 것이므로 작업의 배경이 되는 비즈니스 또는 응용 분야에 대한 지식이 중요하다.

Ÿ   그래픽 효과의 극대화 - 사람은 그림을 이용하면 더 잘 배운다. 윈도우 형태의 GUI가 애용되는 것은 배우고 사용하기 쉬운 인터페이스이기 때문이다. GUI가 보편적으로 사용되어 주문형 소프트웨어에도 도입되고 있고 한 화면에 여러 윈도우를 올려서 동시에 작업하기도 한다. GUI는 자료 입력뿐만 아니라 프로세스 제어에도 사용되기 때문에 세심한 설계가 필요하다.

Ÿ   사용자에 대한 이해 - 시스템 사용자들의 경험과 지식, 사용 수준에 관심을 가지고 사용자 중심의 인터페이스를 개발하기 위하여 사용자의 입장에서 생각하고 설계하여야 한다. 사용자에 익숙한 단어와 메타포를 사용하여야 하기 때문이다. 또한 사용자가 현금자동인출기나 마이크로웨이브 오븐, 자동차, 휴대폰 등을 사용해 본 경험이 도움이 되도록 설계하는 것이 좋다.

Ÿ   프로토타입의 사용 - 사용자 인터페이스는 사용자가 시스템의 부분 중 가장 많이 접하는 요소이므로 중요하다. 또한 사용자의 의견을 반영하기 위하여 모델이나 프로토타입을 조기에 만들기도 한다. 처음 화면을 설계할 때 스토리 보드를 만들어 사용자에게 보여주기도 하며 사용자는 사용성 측면에서 검토하여 피드백을 제공한다.

Ÿ   이해하기 쉬운 인터페이스 - 사용자 인터페이스는 모든 작업, 명령어, 커뮤니케이션을 포함하여야 한다. 예를 들어 어떤 시스템의 메인 메뉴를 정하려고 할 때 너무 적은 숫자의 메뉴는 다음 수준에 많은 선택 메뉴를 두어야 한다. 반대로 너무 많은 선택을 첫 메뉴에 두면 사용자에게 혼란을 가져 올 수 있다. 적절한 개수의 메뉴를 두어야 네비게이션 과정이 복잡하지 않게 된다.

Ÿ   지속적인 피드백 - 시스템 운영이 시작된 후에도 계속 시스템의 사용을 모니터링하고 사용자의 제안을 구해야 한다. 시스템의 기능이 의도한 대로 사용되고 있는지 관찰하고 조사한다. 프로토타입에서는 잘 드러나지 않던 문제가 시스템을 풀가동할 때는 드러나는 경우도 많이 있다.

 

 

 

 

 

 

 

 

 

Image result for 모바일 사용자 인터페이스

그림 1 모발 사용자 인터페이스 설계

 

DB 설계

 

정규화와 함께 데이터베이스 설계의 또 하나의 이슈는 클래스 다이어그램에서의 클래스와 다중도를 관계형 데이터베이스 설계에서 테이블에 어떻게 매핑 시키느냐는 문제이다..

 

Ÿ   단순 데이터 구조를 가진 클래스는 테이블로 매핑한다.

Ÿ   객체 식별자는 기본 키가 된다. 모든 객체를 위하여 유일한 식별자를 생성하며 관계형테이블에 있는 기본 키로 사용될 수 있다.

Ÿ   다른 클래스의 인스턴스를 속성으로 가지고 있는 클래스는 그 클래스를 위하여 별도의 테이블을 생성하여야 한다. 포함 클래스의 객체는 유일한 객체 식별자가 있어야 한다. 객체 식별자는 포함하고 있는 클래스의 테이블에 있는 포함된 객체를 외부 키로 대치하여야 한다.

Ÿ   집합관계의 클래스는 다음과 같이 매핑한다. 컨테이너 클래스가 여러 객체를 포함하는 관계에 있을 때 2개의 필드를 가진 별도의 테이블을 생성한다. 하나는 컨테이너 클래스에 속하는 객체의 식별자를 가지며 다음 필드는 포함하는 클래스에 속하는 객체의 식별자를 갖게 한다.

Ÿ   1 M의 관계는 집합 관계로 취급할 수 있다.

Ÿ   M N의 관계는 별도의 테이블을 만든다. 즉 두 개의 필드를 가진 연관 테이블을 만든다. 테이블의 각 행은 객체 식별자와 연관에 참여하는 각 객체의 식별자로 구성한다.

Ÿ   1 1 연관은 외부 키 속성으로 구현된다. 각 클래스는 연관 객체의 객체 식별자를 가진 외부 속성을 갖는다.

 

 

 

 

 

 

DRW00000e382be9

그림 2 클래스와 테이블의 매핑

 

그림 2에 있는 것이 클래스와 테이블의 매핑을 보기 쉽게 예로 든 것이다. 왼쪽의 Order 클래스는 데이터베이스의 Order 테이블로 매핑된다. OrderItem 클래스도 오른쪽의 OrderItem 테이블로 매핑시킨다. 1 N의 집합관계는 포함되는 클래스인 OrderItem 테이블에 외부키, OrderID를 두어 식별하게 한다.

상속 관계를 관계형 데이터베이스에 표현하는 방법은 다음과 같이 세 가지가 있다.

 

Ÿ   슈퍼 클래스만을 테이블로 구현한다. 슈퍼 클래스의 속성은 슈퍼 클래스 테이블의 속성이 된다. 서브 클래스가 슈퍼 클래스와 다른 것이 속성보다는 동작이 더 다를 때 적합한 방법이다.

Ÿ   서브 클래스만 테이블로 구현한다. 슈퍼 클래스의 속성은 서브 클래스 테이블에 존재하게 한다. 슈퍼 클래스가 추상 클래스이어서 인스턴스가 없다면 이 방법으로 구현한다.

Ÿ   서브 클래스와 슈퍼 클래스를 별도의 테이블로 구현한다. 서브 클래스를 위한 데이터를 탐색하려면 슈퍼클래스와 서브클래스 모두를 접근하여야 한다.